Titre

-------------------------------------- Chapitre IV - dotNET ---------------------------------------

Analyse sous Ollydbg - 2/4

 

RelativeAddress

Fig.7

NameLength

Fig.8

Nos soupçons se confirment et les 2 prochains récupèrent l’eMail et sa longueur, puis le Registration Code afin de contrôler si les champs ne sont pas vides. Continuons de tracer pour s’en assurer.On arrive là :

AvantCheck

Fig.9

Maintenant que nous sommes prêts, on remarque tout de suite que nous serions passés au-dessus du CALL d’où l’on vient en $+B6, si le saut avait été pris en $+75…(Fig.7) On peut donc imaginer qu’il va être intéressant d’aller voir ce qu’il va se passer dans le CALL en $+6E. Posons-y donc un BP [F2] (Notez que si vous redémarrez la cible dans Olly, les BP ne seront pas conservés étant donné que toutes les adresses auront changées, il vous faudra reprendre depuis le début…)
Jetons un œil un peu plus haut encore, et nous remarquons encore une fois quelque chose d’intéressant … On y aperçoit 3 occurrences successives de ces 2 lignes :

CALL DWORD PTR DS:[EAX+164]
CMP DWORD PTR DS:[EAX+8],0

Tiens tiens, comme c’est étrange, nous avons justement rempli 3 champs pour l’enregistrement, et ici, on teste 3 fois si une valeur est non nulle… « O…D…I…L… je me demande ce qu'il voulait nous dire » (Ok, je sors !).
Posons un BP là aussi !

Bon nous avons assez d’éléments pour tester notre flair. Et pendant que je suis dans les répliques :
« -Et Chef ?
-Oui mon petit ?
-Comment on fait pour devenir Chef, Chef ?
-Le flair mon petit…le flair ! »
C’est promis, c’était le dernier, après j’arrête.

On lance la bête [F9]on clique sur OK quand la MessageBox apparaît et revérifie notre Serial, pour voir si on break bien où on l’espère.

Bam, Olly break en $+E sur le premier CALL DWORD PTR DS :[EAX+164], on fait un petit F8 pour voir ce qu’il en ressort. Premier signe positif, la valeur comparée à 0 est 0Ah (soit 10d, ce qui correspond à la longueur de mon Name : Papa Bango).
Dans la fenêtre des registres, faîtes un clic droit sur EAX (qui contient la valeur de retour de la fonction), puis « Follow in Dump » (Fig.8).

Continuons de tracer. Laissons tomber le premier CALL rencontré… en observant la fenêtre de dump, on comprend qu’il ne fait que récupérer une seconde fois les informations d’enregistrement, et entrons donc dans le CALL à l’adresse $6E (F7), puis passons à nouveau en adresse relative sur le PUSH EBP où l’on arrive.

Check

Fig.10

Les premières instructions, vous l’aurez compris, vérifient une nouvelle fois, la valeur non nulle des trois champs…Quelle redondance le .NET ! Je ne sais pas si c’est lié au fait que ce soit programmé en .NET, mais on commence à mieux saisir l’intérêt d’utiliser un désassembleur adapté au langage…encore faut-il le comprendre :)
Rentrons maintenant dans le Call.

Vous voyez que cette analyse sous Olly, comme je le disais en prélude, est "intuitive" et peut difficilement être méthodologiquement expliquée.
Pour éviter de vous donner la marche étape par étape à coup de 12 F7, 3 F8, à droite puis à gauche...STOP! C'est là.... je vous donnerai les étapes grossières puis vous travaillerez tout seul :D.

A ce stade on tombe dans une routine:

InCheck

Fig.11

 

 

Precedent        Sommaire        Suivant